﻿package planningsbord {

	import flash.events.TUIO;
	import flash.events.*;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.display.Shape;
	import fl.controls.Button;
	import fl.transitions.Tween;
	import fl.transitions.easing.*;
	
	public class Planningsbord extends Sprite {

		private var medewerkers:Array = new Array();
		private var clienten:Array = new Array();
		private var placeholders:Array = new Array();
		private var newMedewerker_mc:Button = new Button();
		private var newClient_mc:Button = new Button();

		public function Planningsbord():void {
			
			// Initialisatie TUIO protocol
			TUIO.init(this,'localhost',3000,'',true);
			trace("Planningsbord geinitialiseerd");

			// Nieuwe medewerker en nieuwe client button
			newMedewerker_mc.x = 200;
			newClient_mc.x = 200;
			newClient_mc.y = newMedewerker_mc.height + 10;
			newMedewerker_mc.width = 150;
			newClient_mc.width = 150;
			newMedewerker_mc.label = "Nieuwe Medewerker";
			newClient_mc.label = "Nieuwe Client";
			
			newMedewerker_mc.addEventListener(TouchEvent.CLICK, nwMedewerkerHandler);
			newClient_mc.addEventListener(TouchEvent.CLICK, nwClientHandler);
			newMedewerker_mc.addEventListener(MouseEvent.CLICK, nwMedewerkerHandler);
			newClient_mc.addEventListener(MouseEvent.CLICK, nwClientHandler);
			addChild(newMedewerker_mc);
			addChild(newClient_mc);
			
			// Placeholders tekenen
			tekenPlaceholders(8, 8, 100, 50, 25);
		}
		public function tekenPlaceholders( rijen:int, kolommen:int, breedte:int, hoogte:int, tussenAfstand:int ):void {
			var i:int = 0;
			var j:int = 0;
			var aantalRijen:int = rijen;
			var aantalKolommen:int = kolommen;
			var dX:int = 0;
			var dY:int = 0;

			for (i=0; i < aantalKolommen; i++) {
				dY = 0;
				dX = dX + breedte + tussenAfstand;
				for (j=0; j < aantalRijen; j++) {
					dY = dY + hoogte + tussenAfstand;
					var placeholder:Placeholder = new Placeholder( i, j );
					placeholder.graphics.lineStyle(3, 0xCCCCCC, 0.3);
					placeholder.x = dX;
					placeholder.y = dY;
					placeholder.alpha = 0.2;
					placeholder.graphics.beginFill(0xCCCCCC);
					placeholder.graphics.drawRect(0,0,breedte,hoogte);
					placeholder.graphics.endFill();
					placeholder.addEventListener(TouchEvent.MOUSE_OVER, mouseOverPlaceholder);
					placeholder.addEventListener(TouchEvent.MOUSE_OUT, mouseOutPlaceholder);
					var slideIn:Tween = new Tween(placeholder, "x", Back.easeOut, 0, placeholder.x, 50);
					placeholders.push(placeholder);
					addChild(placeholder);
				}
			}
		}
		private function mouseOverPlaceholder(e:Event):void {
			e.target.alpha = 1;
		}
		private function mouseOutPlaceholder( e:Event ):void {
			e.target.alpha = 0.2;
		}
		public function nieuweMedewerker( naam:String ):void {
			// maak een kaartje voor deze medewerker
			var kaartje = new Kaart( naam, true );
			kaartje.addEventListener(TouchEvent.MOUSE_UP, releaseKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_UP, releaseKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_OVER, mouseOverKaart);
			kaartje.addEventListener(TouchEvent.MOUSE_OVER, mouseOverKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_OUT, mouseOutKaart);
			kaartje.addEventListener(TouchEvent.MOUSE_OUT, mouseOutKaart);
			
			// maak een nieuwe medewerker aan en geef het kaartje mee
			var medewerker = new Medewerker( naam, kaartje );
			
			// plaats het kaartje op het bord
			addChild(kaartje);
			kaartje.x = 400;
			kaartje.y = 15;
		}
		public function nieuweClient( naam:String ):void {
			// maak een nieuwe kaartje voor de client
			var kaartje = new Kaart(naam, false);
			kaartje.addEventListener(TouchEvent.MOUSE_UP, releaseKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_UP, releaseKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_OVER, mouseOverKaart);
			kaartje.addEventListener(TouchEvent.MOUSE_OVER, mouseOverKaart);
			kaartje.addEventListener(MouseEvent.MOUSE_OUT, mouseOutKaart);
			kaartje.addEventListener(TouchEvent.MOUSE_OUT, mouseOutKaart);
			// Maak een nieuwe client en geef het kaartje mee
			var client = new Client( naam, kaartje );

			// plaats het kaartje op het planningsbord
			addChild(kaartje);
			kaartje.x = 525;
			kaartje.y = 15;
		}
		public function releaseKaart(e:Event):void {
			var i:int = 0;
			for (i=0; i<placeholders.length; i++) {
				if ( e.target.hitTestObject(placeholders[i]) ) {				
						e.target.x = placeholders[i].x;
						e.target.y = placeholders[i].y;
						e.target.setRijID( placeholders[i].getRijID() );
						e.target.setKolomID( placeholders[i].getKolomID() );
						break;
				}
			}
		}
		private function mouseOverKaart(e:Event):void {
			e.target.alpha = 0.8;
		}
		private function mouseOutKaart(e:Event):void {
			e.target.alpha = 1;
		}
		public function nwMedewerkerHandler(e:Event):void {
			nieuweMedewerker("Medewerker");
		}
		public function nwClientHandler(e:Event):void {
			nieuweClient("Client");
		}
	}
}